/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.isil.sco.proyecto.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.sql.DataSource;
import pe.isil.sco.proyecto.bean.Categoria;
import pe.isil.sco.proyecto.bean.Cupon;
import pe.isil.sco.proyecto.bean.Venta;
import pe.isil.sco.proyecto.bean.Ventadetalle;
import pe.isil.sco.proyecto.dao.CategoriaDAO;
import pe.isil.sco.proyecto.dao.CuponDAO;
import pe.isil.sco.proyecto.dao.VentaDetalleDAO;
import pe.isil.sco.proyecto.util.Conexion;

/**
 *
 * @author CASA
 */
public class VentaDetalleJDBC implements VentaDetalleDAO {

    Connection conn = null;

    @Override
    public ArrayList<Ventadetalle> getListTotalDetalleVentaCliente(Integer idCliente) {
        ArrayList<Ventadetalle> listVentadetalle = null;
        //Connection cn = null;
        try {
            Conexion conexion = Conexion.getInstance();
            DataSource ds = conexion.getDataSource();
            conn = ds.getConnection();
            String query = "SELECT * FROM ventadetalle INNER JOIN venta ON ventadetalle.idVenta = venta.idVenta WHERE venta.idCliente =" + idCliente;
            Statement stm = conn.createStatement();
            ResultSet rs = stm.executeQuery(query);
            listVentadetalle = new ArrayList<Ventadetalle>();

            while (rs.next()) {
                Ventadetalle c = new Ventadetalle();
                c.setCantidad(rs.getInt("ventadetalle.codigo"));
                c.setIdCupon(rs.getInt("ventadetalle.idCupon"));
                c.setIdVenta(rs.getInt("ventadetalle.idVenta"));
                c.setIdVentaDetalle(rs.getInt("ventadetalle.idVentaDetalle"));

                listVentadetalle.add(c);
            }
            stm.close();
            conn.close();
            return listVentadetalle;
        } catch (Exception e) {
            System.out.println("ERROR:-------> " + e.getMessage());
        }
        return listVentadetalle;
    }

    @Override
    public void grabarVenta(ArrayList<Ventadetalle> detalleVenta, Venta venta) throws Exception {
        
        try {
            Conexion conexion = Conexion.getInstance();
            DataSource ds = conexion.getDataSource();
            conn = ds.getConnection();
            conn.setAutoCommit(false);


            String query = "insert into venta(idCliente,fechaVenta,"
                    + "total, ccard_no, ccard_type, ccard_exprmonth, ccard_expryear, name_oncard,trn_nro,trn_dt,trn_bankname) values(?,sysdate(),?,?,?,?,?,?,?,sysdate(),?)";
            PreparedStatement pstm = conn.prepareStatement(query);
            pstm.setInt(1, venta.getIdCliente());
            pstm.setDouble(2, venta.getTotal());
            pstm.setString(3, venta.getNro_card());
            pstm.setString(4, venta.getTipo_card());
            pstm.setInt(5, venta.getMes_card());
            pstm.setInt(6, venta.getAnio_card());
            pstm.setString(7, venta.getNom_propi());
            pstm.setInt(8, (int) (Math.random() * 999999 + 1));
            pstm.setString(9, venta.getNom_bank());
            pstm.executeUpdate();


            query = "select max(idVenta) as id from venta";
            pstm = conn.prepareStatement(query);
            ResultSet rs = pstm.executeQuery();
            rs.next();
            Integer idVenta = rs.getInt("id");
            System.out.println("ID DE VENTA NUEVA: "+idVenta);
            // Grabar los detalles y actualizar los stocks
            for (Ventadetalle ventadetalle : detalleVenta) {
                int cant = ventadetalle.getCantidad();

                for (int i = 0; i < cant; i++) {

                    query = "insert into ventadetalle(idVenta,idCupon,codigo"
                            + ") values(?,?,?)";
                    pstm = conn.prepareStatement(query);
                    pstm.setInt(1, idVenta);
                    pstm.setInt(2, ventadetalle.getIdCupon());
                    pstm.setInt(3, (int) (Math.random() * 999999 + 1));
                    

                    
                    pstm.executeUpdate();

                }





                // Grabar el detalle


            }

            conn.commit(); //aqui se ejecuta todo
            pstm.close();
        } catch (Exception e) {
            try {
                System.out.println("ERROR e" + e);
                conn.rollback(); //para deshacer todo
            } catch (Exception e1) {
                System.out.println("ERROR e1" + e1);
            }
            throw e;
        } finally {
            try {
                conn.close();
            } catch (Exception e2) {
                System.out.println("ERROR e2" + e2);
            }
        }
    }
}
